import fs from 'node:fs'
import path from 'node:path'
import YAML from 'yaml'

class FigurineConfig {
  constructor() {
    this.pluginPath = path.join(process.cwd(), 'plugins', 'GeminiImage-plugin')
    this.configPath = path.join(this.pluginPath, 'config')
  }

  loadConfig() {
    const defaultConfigPath = path.join(this.configPath, 'geminiImage-default.yaml')
    const userConfigPath = path.join(this.configPath, 'geminiImage.yaml')
    
    // 检查默认配置文件是否存在
    if (!fs.existsSync(defaultConfigPath)) {
      throw new Error('[手办工坊] 默认配置文件不存在: ' + defaultConfigPath)
    }
    
    // 如果用户配置文件不存在，则从默认配置文件复制
    if (!fs.existsSync(userConfigPath)) {
      fs.copyFileSync(defaultConfigPath, userConfigPath)
    }
    
    // 读取默认配置
    const defaultConfig = this.readConfigFile(defaultConfigPath)
    
    // 读取用户配置
    try {
      const userConfig = this.readConfigFile(userConfigPath)
      
      // 合并配置，确保用户配置中包含所有必需的节点
      const mergedConfig = { ...defaultConfig, ...userConfig }
      
      // 特别处理 prompts 节点，确保所有默认提示词都存在
      if (!mergedConfig.prompts) {
        mergedConfig.prompts = defaultConfig.prompts
      } else {
        for (const [key, value] of Object.entries(defaultConfig.prompts)) {
          if (!mergedConfig.prompts[key]) {
            mergedConfig.prompts[key] = value
          }
        }
      }
      
      return mergedConfig
    } catch (err) {
      logger.error(`[手办工坊] 配置文件读取失败: ${err}`)
      return defaultConfig
    }
  }

  readConfigFile(filePath) {
    try {
      const configFile = fs.readFileSync(filePath, 'utf8')
      return YAML.parse(configFile)
    } catch (err) {
      throw new Error(`配置文件读取失败: ${filePath}, 错误: ${err.message}`)
    }
  }

  getConfig() {
    // 每次都重新加载配置，实现热加载效果
    return this.loadConfig()
  }
}

export default new FigurineConfig()
